package com.cucn.eduservice.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.cucn.eduservice.entity.EduCourse;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cucn.eduservice.entity.frontvo.CourseFrontVO;
import com.cucn.eduservice.entity.frontvo.CourseWebVO;
import com.cucn.eduservice.entity.vo.CourseInfoVO;
import com.cucn.eduservice.entity.vo.CoursePublishVO;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 课程 服务类
 * </p>
 *
 * @author KouChaoJie
 * @since 2021-09-29
 */
public interface EduCourseService extends IService<EduCourse> {

    /**
     * 保存课程的基本信息
     *
     * @param courseInfoVO 表单传递过来的课程基本信息传输对象
     * @return 添加的课程的id值
     */
    String saveCourseInfo(CourseInfoVO courseInfoVO);

    /**
     * 根据课程id查询课程信息
     *
     * @param courseId 课程id
     * @return 课程信息传输对象
     */
    CourseInfoVO getCourseInfo(String courseId);

    /**
     * 修改课程信息
     *
     * @param courseInfoVO 前台传输过来的课程信息
     */
    void updateCourseInfo(CourseInfoVO courseInfoVO);

    /**
     * 根据课程id查询课程最终确认信息
     *
     * @param courseId 最终确认课程的id
     * @return 最终课程信息传输对象
     */
    CoursePublishVO publishCourseInfo(String courseId);

    /**
     * 删除课程方法
     *
     * @param courseId 要删除的课程对应id
     */
    void removeCourse(String courseId);

    /**
     * 查询热门课程
     *
     * @return 热门课程集合
     */
    List<EduCourse> selectCourseList();

    /**
     * 前台条件查询带分页查询课程
     *
     * @param pageCourse    分页对象
     * @param courseFrontVO 条件查询封装对象
     * @return 查询出的所有分页信息
     */
    Map<String, Object> getCourseFrontList(Page<EduCourse> pageCourse, CourseFrontVO courseFrontVO);

    /**
     * 根据课程id查询课程的基本信息
     *
     * @param courseId 课程id
     * @return 课程基本信息
     */
    CourseWebVO getBaseCourseInfo(String courseId);
}
